import java.io.Serializable;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @Author @fiber-cloud
 * @Date 2025/8/3 10:57
 * 简单实现一个stack
 */
public class MyStack {
//    //这里实现的底层为一个数组
//    int[] array;
//    int size;
//
//    public MyStack(){
//        this.array = new int[5];
//    }
//    public int size(){
//        return size;
//    }
//
//
//    //入栈
//    public int push(int val) {
//        ensuerCapacity();
//        array[size++] = val;
//        return val;
//    }
//
//
//    //出栈
//    public int pop(){
//        if (empty()){
//            throw new MyEmptyStackException("栈为空");
//        }
//        return array[--size];
//    }
//    //获取栈顶元素
//    public Serializable peek(){
//        if (empty()){
//            throw  new MyEmptyStackException("栈为空，无法获得栈顶元素");
//        }
//        return array[size-1];
//    }
//    //栈是否为空
//    public boolean empty() {
//        if (size == 0){
//            return true;
//        }
//        return false;
//    }
//    //栈内扩容
//    private void ensuerCapacity() {
//        if (size == array.length){
//            array = Arrays.copyOf(array,2*size);
//        }
//    }


    //用队列实现栈
    private Queue<Integer> queue1;
    private Queue<Integer> queue2;


    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }

    //入到不为空的队列当中
    public void push(int x) {
        if (!queue1.isEmpty()){
            queue1.offer(x);
        } else if (!queue2.isEmpty()) {
            queue2.offer(x);
        }else {
            //两个队列都是空
            queue1.offer(x);
        }
    }



    //找到不为空的队列，出size-1个元素到另一个队列中去
    public int pop() {
        if(empty()) {
            return -1;//
        }
        if(!queue1.isEmpty()) {
            int size = queue1.size();
            for (int i = 0; i < size-1; i++) {
                queue2.offer(queue1.poll());
            }
            return queue1.poll();
        }else {
            int size = queue2.size();
            for (int i = 0; i < size-1; i++) {

                queue1.offer(queue2.poll());
            }
            return queue2.poll();
        }
    }

    public int top() {
        if(empty()) {
            return -1;//
        }
        if(!queue1.isEmpty()) {
            int size = queue1.size();
            int ret = -1;
            for (int i = 0; i < size; i++) {
                ret = queue1.poll();
                queue2.offer(ret);
            }
            return ret;
        }else {
            int size = queue1.size();
            int ret = -1;
            for (int i = 0; i < size; i++) {
                ret =  queue2.poll();
                queue1.offer(ret);
            }
            return ret;
        }
    }

    public boolean empty() {
        return queue1.isEmpty() && queue2.isEmpty();
    }
}
